package com.qdlc.p2p.biz.service.activity;

import com.qdlc.p2p.biz.service.activity.plan.CustomActivityPlanHandler;
import com.qdlc.p2p.dal.dto.NewActivityRule;

/**
 * 活动方案处理器，处理每种活动方案类型
 * 
 * <p>
 * 活动方案类型定义在ActivityProgrammeEnum枚举中，所以每一个处理器都对应了一个枚举值
 * </p>
 * 
 * @author linya
 */
public interface ActivityProgrammeHandler<T extends ActivityProgrammeParam> {

	/**
	 * 处理指定活动方案
	 * @return
	 */
	ActivityProgrammeEnum supportsProgramme();
	
	/**
	 * 创建参数对象
	 * @param attatchmentObject
	 * @return
	 */
	T createProgrammeParam(Object attatchmentObject);
	
	/**
	 * 处理活动方案
	 * @param activityProgramme 活动方案对象
	 * @param param 活动方案参数
	 * @throws ActivityPlanException
	 * @see {@link CustomActivityPlanHandler}
	 */
	void handle(NewActivityRule activityProgramme, T param) throws ActivityPlanException;
	
	/**
	 * 处理活动方案(自定义)
	 * @param param
	 */
	void handleCustom(T param) throws ActivityPlanException;
}
